package com.usian.feign;

import com.usian.fallback.ItemServiceFallback;
import com.usian.pojo.*;
import com.usian.utils.CatResult;
import com.usian.utils.PageResult;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;
import java.util.Map;

/**
 * @author chen
 * @date 2021/1/9 - 11:36 - 星期六
 * @project usian_parent
 * @package com.usian.feign
 * @by GGbomd猪猪侠
 */
@FeignClient(value = "usian-item-service",fallbackFactory = ItemServiceFallback.class) //扫描服务端
@Component
public interface TbItemFeign {

    /**
     * 商品列表查询
     * @param page  页码
     * @param rows  每页显示的条数
     * @return
     */
    @RequestMapping("/selectTbItemAllByPage")
    PageResult selectTbItemAllByPage(@RequestParam Integer page,@RequestParam Integer rows);

    /**
     * 查询分类表 根据父节点查询子节点
     * @param id
     * @return
     */
    @RequestMapping("/selectItemCategoryByParentId")
    List<TbItemCat> selectItemCategoryByParentId(@RequestParam Long id);

    /**
     * 根据商品类目的id去查询 规格参数
     * @param itemCatId
     * @return
     */
    @RequestMapping("/selectItemParamByItemCatId/{itemCatId}")
    TbItemParam selectItemParamByItemCatId(@PathVariable("itemCatId") Long itemCatId);

    /**
     * 商品的添加
     * @param tbItem
     * @param desc
     * @param itemParams
     * @return
     */
    @RequestMapping("/insertTbItem")
    Integer  insertTbItem(@RequestBody TbItem tbItem, @RequestParam String desc , @RequestParam String itemParams);

    /**
     * 商品的删除
     * @param itemId
     * @return
     */
    @RequestMapping("/deleteItemById")
    Integer deleteItemById(@RequestParam Long itemId);

    /**
     * 根据商品 ID 查询商品，商品分类，商品描述，商品规格参数
     * @param itemId
     * @return
     */
    @RequestMapping("/preUpdateItem")
    Map<String,Object> preUpdateItem(@RequestParam("itemId") Long itemId);

    /**
     * 查询规格模板参数
     * @param page
     * @param rows
     * @return
     */
    @RequestMapping("/selectItemParamAll")
    PageResult selectItemParamAll(@RequestParam Integer page,@RequestParam Integer rows);

    /**
     * 根据商品id去修改
     * @param tbItem
     * @param desc
     * @param itemParams
     * @return
     */
    @RequestMapping("/updateTbItem")
    Integer updateTbItem(@RequestBody TbItem tbItem, @RequestParam String desc , @RequestParam String itemParams);

    /**
     * 添加商品规格模板 同时操作tb_item_cat表和tb_item_param
     * @param itemCatId
     * @param paramData
     * @return
     */
    @RequestMapping("/insertItemParam")
    Integer insertItemParam(@RequestParam Long itemCatId,@RequestParam String paramData);

    /**
     * 根据id删除商品规格模板
     * @param id
     * @return
     */
    @RequestMapping("/deleteItemParamById")
    Integer deleteItemParamById(@RequestParam Long id);

    /**
     * 查询首页商品分类
     * 操作tb_item_cat
     * @return
     */
    @RequestMapping("/selectItemCategoryAll")
    CatResult selectItemCategoryAll();

    /**
     * 查询商品基本详细信息
     * @param itemId
     * @return
     */
    @RequestMapping("/selectItemInfo")
    TbItem selectItemInfo(@RequestParam Long itemId);

    /**
     * 根据商品 ID 查询商品描述
     * @param itemId
     * @return
     */
    @RequestMapping("/selectItemDescByItemId")
    TbItemDesc selectItemDescByItemId(@RequestParam Long itemId);


    /**
     * 根据商品 ID 查询商品规格
     * @param itemId
     * @return
     */
    @RequestMapping("/selectTbItemParamItemByItemId")
    TbItemParamItem selectTbItemParamItemByItemId(@RequestParam Long itemId);
}
